<?php

// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2010 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: luofei614 <www.3g4k.com>
// +----------------------------------------------------------------------
// $Id: SaeCounter.class.php 2766 2012-02-20 15:58:21Z luofei614@gmail.com $
/**
 * SaeCounter模拟器
 * 使用了数据库存储统计器信息，
 * 相关数据表：think_sae_counter
 */
class SaeCounter extends SaeObject {
	
	//创建统计器
	public function create($name, $value = 0) {
		//判断是否存在
		if ($this->exists ( $name ))
			return false;
		return self::$db->runSql ( "insert into sae_counter(name,val) values('$name','$value')" );
	}
	
	//减法
	public function decr($name, $value = 1) {
		if (! $this->exists ( $name ))
			return false;
		self::$db->runSql ( "update sae_counter set val=val-$value where name='$name'" );
		return self::$db->getVar ( "select val from sae_counter where name='$name'" );
	}
	
	//是否存在
	public function exists($name) {
		$num = self::$db->getVar ( "select count(*) from sae_counter where name='$name'" );
		return $num != 0 ? true : false;
	}
	
	public function get($name) {
		if (! $this->exists ( $name ))
			return false;
		return self::$db->getVar ( "select val from sae_counter where name='$name'" );
	}
	
	public function getall() {
		$data = self::$db->getData ( "select * from sae_counter where name='$name'" );
		$ret = array ();
		foreach ( $data as $r ) {
			$ret [$r ['name']] = $r ['val'];
		}
		return $ret;
	}
	
	//加法
	public function incr($name, $value = 1) {
		if (! $this->exists ( $name ))
			return false;
		self::$db->runSql ( "update sae_counter set val=val+$value where name='$name'" );
		return self::$db->getVar ( "select val from sae_counter where name='$name'" );
	}
	
	public function length() {
		return self::$db->getVar ( "select count(*) from sae_counter" );
	}
	
	//获得多个统计器，names为数组
	public function mget($names) {
		array_walk ( $names, function (&$name) {
			$name = "'$name'";
		} );
		$where = implode ( ',', $names );
		$data = self::$db->getData ( "select * from sae_counter where name in($where)" );
		$ret = array ();
		foreach ( $data as $r ) {
			$ret [$r ['name']] = $r ['val'];
		}
		return $ret;
	}
	
	public function remove($name) {
		if (! $this->exists ( $name ))
			return false;
		return self::$db->runSql ( "delete from sae_counter where name='$name'" );
	}
	
	//设置值
	public function set($name, $value) {
		return self::$db->runSql ( "update sae_counter set val='$value' where name='$name'" );
	}

}

?>